home *** CD-ROM | disk | FTP | other *** search
- /*
- ### primary to secandary coord transformation (euclidean to polar) ###
- */
-
- euclid_to_polar(v_pol,v_euc)
- double v_pol[],v_euc[];
- {
- int i;
- double atan(),sqrt();
- extern int var_dim,enable_polar;
- extern double pi;
- extern char string[];
-
- switch(enable_polar){
- case 1:
- if(var_dim == 4){
- v_pol[0] =sqrt(v_euc[0] * v_euc[0] + v_euc[2] * v_euc[2]);
- v_pol[1] =(v_euc[0]*v_euc[1]+v_euc[2]*v_euc[3])/v_pol[0];
- /* old */
- /*
- v_pol[2] =atan(v_euc[0]/v_euc[2]);
- if(v_euc[2] < 0) {
- if(v_euc[0] > 0)
- v_pol[2] += pi;
- else
- v_pol[2] -= pi;
- }
- v_pol[3] = 1/v_pol[0]/v_pol[0]*(v_euc[1] * v_euc[2] - v_euc[0] * v_euc[3]);
- */
- v_pol[2] =atan(v_euc[2]/v_euc[0]);
- if(v_euc[0] < 0) {
- if(v_euc[2] > 0)
- v_pol[2] += pi;
- else
- v_pol[2] -= pi;
- }
- v_pol[3] = 1/v_pol[0]/v_pol[0]*(v_euc[3] * v_euc[0] - v_euc[1] * v_euc[2]);
- }
- else {
- for(i=0; i<var_dim-1;i +=2){
- v_pol[i] =sqrt(v_euc[i] * v_euc[i] + v_euc[i+1] * v_euc[i+1]);
- v_pol[i+1] =atan(v_euc[i+1]/v_euc[i]);
- }
- }
- break;
- case 2:
- for(i=0; i<var_dim-1;i +=2){
- v_pol[i] =sqrt(v_euc[i] * v_euc[i] + v_euc[i+1] * v_euc[i+1]);
- v_pol[i+1] =atan(v_euc[i+1]/v_euc[i]);
- }
- break;
- default:
- sprintf(string,"euclid_to_polar: coord transform for mode=%d is not implemented!",enable_polar);
- system_mess_proc(1,string);
- break;
- }
- }
-